// cf-645e
// 题意：给定一个长度为m(<=10^6)的只由前k个小写字母组成的串，
//       现在要你在尾部任意添加n(<=10^6)个仅在前k个字母中字母，
//       问最终的串的不重复子序列（包括空串）的最大数目。答案对
//       10^9+7取模。
//
// 题解：我们先算确定的长度为m的串的不重复子序列的个数，其实只需要
//       从左往右做每个字符，然后设dp[ch]示当前以ch结尾的序列的个数，
//       那么当前做到i，dp[i]就等于所有可以选的字符j，sigma(dp[j]) + 1。
//       这样剩下的m个字符我们就只需要贪心的选dp最小的字符来填就行。
//       因为每次得到的新的dp是最大的，所以不用求最小值，一定是按照循环
//       的顺序取。最后加上1表示空串就行。
//
// run: $exec < input
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

long long constexpr mo = 1000000007;
int constexpr maxn = 27;
long long a[maxn];
int n, k;

struct data
{
	int ch;
	int last;
};
std::vector<data> v;

std::string s;

int main()
{
	std::cin >> n >> k;
	v.resize(k);
	for (int i = 0; i < k; i++) v[i].ch = i;
	std::cin >> s;
	long long sum = 0;
	for (int i = 0; i < (int)s.size(); i++) {
		v[s[i] - 'a'].last = i + 1;
		long long tmp = (sum + 1) % mo;
		sum = (sum + tmp - a[s[i] - 'a']) % mo;
		sum = (sum + mo) % mo;
		a[s[i] - 'a'] = tmp;
	}
	std::sort(v.begin(), v.end(), [](data const & a, data const & b) {
				return a.last < b.last;
			});
	int t = 0;
	for (int i = 0; i < n; i++, t = (t + 1) % k) {
		long long tmp = (sum + 1) % mo;
		sum = (sum + tmp - a[v[t].ch]) % mo;
		sum = (sum + mo) % mo;
		a[v[t].ch] = tmp;
	}
	sum = (sum + 1) % mo;
	std::cout << sum << '\n';
}

